package hot100;


/*
 * Author：江松
 * Date：2023/4/12 10:34
 *
 字符串解码:
 栈:数字栈，操作字符栈
a2[a33[ab]4[3[ac]d]cd]bc
 */

import java.util.Stack;

public class Main394 {


    public String decodeString(String s) {
        Stack<Integer> num=new Stack<>();
        Stack<Character>ch=new Stack<>();

        for(int i=0;i<s.length();++i){
            char c=s.charAt(i);
            if(c>='0'&&c<='9'){
                int t=0;
                while(s.charAt(i)>='0'&&s.charAt(i)<='9'){
                    t=t*10+s.charAt(i)-'0';
                    i++;
                }
                num.push(t);
                i--;
            }else if(c==']'){
                //打开字符串，并将结果入栈
                StringBuilder sb=new StringBuilder();
                while(!ch.isEmpty()&&ch.peek()!='['){
                    sb.append(ch.pop());
                }
                ch.pop();
                sb=sb.reverse();
                //注意要新用一个sb，如果用sb.append(sb)，sb一直是变化的，结果不对
                StringBuilder tmp=new StringBuilder();
                int ops=num.pop();
                while(ops-->0){
                    tmp.append(sb);
                }
                for(int j=0;j<tmp.length();++j){
                    ch.push(tmp.charAt(j));
                }
            }else{
                ch.push(c);
            }
        }


        StringBuilder res=new StringBuilder();
        int n=ch.size();
        for(int i=0;i<n;++i){
            res.append(ch.pop());
        }
        return res.reverse().toString();
    }
}
